package com.tanhua.server.controller;

import com.tanhua.model.mongo.Movement;
import com.tanhua.model.vo.MovementsVo;
import com.tanhua.model.vo.PageResult;
import com.tanhua.model.vo.TodayBest;
import com.tanhua.server.service.MovementsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;

@RestController
@RequestMapping("/movements")
public class MovementsController {

    @Autowired
    private MovementsService movementsService;

    /**
     * 发布动态
     * POST
     * 请求参数：
     * textContent	T文本 imageContent	文件
     * 图片动态（支持多张图片  location 位置longitude经度latitude纬度
     * 返回值：  无
     */
    @PostMapping
    public ResponseEntity movements(String textContent, MultipartFile[] imageContent,
                                    String location, String longitude, String latitude) throws IOException {
        //1.获取请求参数
        Movement movement = new Movement();
        movement.setTextContent(textContent);
        movement.setLocationName(location);
        movement.setLongitude(longitude);
        movement.setLatitude(latitude);

        //2.调用service方法
        movementsService.movements(imageContent, movement);
        //3.返回
        return ResponseEntity.ok(null);
    }

    /**
     * 查询个人动态
     * GET    /all
     * 请求参数：Query：  page  pagesize  userId
     * 返回值： PageResult
     */
    @GetMapping("/all")
    public ResponseEntity all(@RequestParam(defaultValue = "1") Integer page,
                              @RequestParam(defaultValue = "10") Integer pagesize, Long userId) {

        PageResult vo = movementsService.all(page, pagesize, userId);
        return ResponseEntity.ok(vo);
    }

    /**
     * 好友动态
     * 请求地址： GET
     * 请求参数： page  pagesize
     * 返回值： PageResult
     */
    @GetMapping
    public ResponseEntity movements(@RequestParam(defaultValue = "1") Integer page,
                                    @RequestParam(defaultValue = "10") Integer pagesize) {
        //调用service查询
        PageResult vo = movementsService.findByFriendId(page, pagesize);
        //构造返回
        return ResponseEntity.ok(vo);
    }

    /**
     * 推荐动态
     * 请求路径：  GET   /recommend
     * 请求参数：  page  pagesize
     * 返回值： PageResult
     *              List<MovementVo>
     */
    @GetMapping("/recommend")
    public ResponseEntity recommend(@RequestParam(defaultValue = "1") Integer page,
                                    @RequestParam(defaultValue = "10") Integer pagesize) {
        //1.调用service方法
        PageResult vo = movementsService.findByRecommend(page, pagesize);
        //2.构造返回
        return ResponseEntity.ok(vo);
    }

    /**
     * 根据id查询动态
     * GET   /movements/{id}
     * 请求参数： 路径参数 id使用注解@PathVariable
     * 返回值 MovementsVo
     */
    @GetMapping("/{movementId}")
    public ResponseEntity findMovementById(@PathVariable("movementId") String movementId) {
        MovementsVo vo = movementsService.findMovementById(movementId);
        return ResponseEntity.ok(vo);
    }

    /**
     * 查询访客：配置一个空的方法
     *  返回值TodayBest
     */
    @GetMapping("/visitors")
    public ResponseEntity visitors() {
        List<TodayBest> vos = movementsService.visitors();
        return ResponseEntity.ok(vos);
    }
    /**
     * 动态-点赞
     * GET      /{movementId}/like
     * 请求参数：  路径参数：id
     * 返回数据：Integer  最新点赞数
     */
    @GetMapping("/{movementId}/like")
    public ResponseEntity like(@PathVariable("movementId") String movementId) {
        Integer count = movementsService.like(movementId);
        return ResponseEntity.ok(count);
    }

    /**
     * 动态-取消点赞
     * GET     /{movementId}/dislike
     * * 请求参数：  路径参数：id
     * * 返回数据：Integer  最新点赞数
     */
    @GetMapping("/{movementId}/dislike")
    public ResponseEntity dislike(@PathVariable("movementId") String movementId) {
        Integer count = movementsService.dislike(movementId);
        return ResponseEntity.ok(count);
    }
    /**
     * 动态-喜欢
     *   GET     /{movementId}/love
     *      * * 请求参数：  路径参数：id
     *      * * 返回数据：Integer  最新喜欢
     */
    @GetMapping("/{movementId}/love")
    public ResponseEntity love(@PathVariable("movementId") String movementId) {
        Integer count = movementsService.love(movementId);
        return ResponseEntity.ok(count);
    }

    /**
     * 动态-取消喜欢
     * GET       /{movementId}/unlove
     * * 请求参数：  路径参数：id
     * * * 返回数据：Integer  最新喜欢数
     */
    @GetMapping("//{movementId}/unlove")
    public ResponseEntity unlove(@PathVariable("movementId") String movementId) {
        Integer count = movementsService.unlove(movementId);
        return ResponseEntity.ok(count);
    }
}
